package vista;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.sql.Date;
import java.util.ArrayList;

import javax.swing.ComboBoxModel;
import javax.swing.DefaultComboBoxModel;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JDesktopPane;

import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.JTextArea;

import javax.swing.JTextField;
import javax.swing.SwingConstants;

import javax.swing.SwingUtilities;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;

import modelo.DetalleSolicitud;
import modelo.Empleado;
import modelo.EstadoServicio;
import modelo.MaterialAsignado;
import modelo.Servicio;
import modelo.ServicioPrestado;
import modelo.Status;
import modelo.TareaAsignada;
import modelo.dao.Servidor;

import util.Utilidades;

/**
 * This code was edited or generated using CloudGarden's Jigloo SWT/Swing GUI
 * Builder, which is free for non-commercial use. If Jigloo is being used
 * commercially (ie, by a corporation, company or business for any purpose
 * whatever) then you should purchase a license for each developer using Jigloo.
 * Please visit www.cloudgarden.com for details. Use of Jigloo implies
 * acceptance of these licensing terms. A COMMERCIAL LICENSE HAS NOT BEEN
 * PURCHASED FOR THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED LEGALLY FOR
 * ANY CORPORATE OR COMMERCIAL PURPOSE.
 */
public class DlgServicioPrestado extends javax.swing.JDialog {

	{
		// Set Look & Feel
		try {
			javax.swing.UIManager
					.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	private JLabel lblCodigo;
	private JTextField txtCodigo;
	private JScrollPane jScrollPane2;
	private JLabel lblEstadoServicio;
	private JButton btBuscarEmpleado;
	private JScrollPane jScrollPane3;
	private JTextArea txtaComentarios;
	private JTextField txtEmpleado;
	private JLabel lblEmpleado;
	private JLabel lblComentarios;
	private JButton btAceptar;
	private JButton btSalir;
	private JButton btnQuitarTarea;
	private JButton btnAgregarTarea;
	private JButton btnAgregarMaterial;
	private JButton btnQuitarMaterial;
	private JButton btnModificarMaterial;
	private JTable tblTareas;
	private JButton btnModificarTarea;
	private JTextField jTextField1;
	private JLabel jLabel2;
	private JTextField txtFechaInicio;
	private JLabel jLabel1;
	private JComboBox cmbEstadoServicio;
	private JScrollPane jScrollPane1;
	private JDesktopPane DPTareas;
	private JTable tblMateriales;
	private JDesktopPane DPMateriales;
	private JTabbedPane jTabbedPane1;
	private JTextField txtDescripcion;
	private JLabel lblDescripcion;
	private JTextField txtServicioBase;
	private JLabel jLabel3;

	private AbstractTableModel atmTareas, atmMateriales;
	private ArrayList<TareaAsignada> tareas;
	private ArrayList<MaterialAsignado> materiales;

	/*public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				DlgServicioPrestado inst = new DlgServicioPrestado(null);
				inst.mostrarPlanificarServicio();
			}
		});
	}*/

	public DlgServicioPrestado(JDialog dialog) {
		super(dialog);
		initGUI();
	}

	private void initGUI() {
		try {
			{
				this.setTitle("Servicio Prestado");
				getContentPane().setLayout(null);
				{
					lblCodigo = new JLabel();
					getContentPane().add(lblCodigo);
					lblCodigo.setText("Codigo:");
					lblCodigo.setBounds(46, 28, 85, 14);
					lblCodigo.setFont(new java.awt.Font("Tahoma", 1, 11));
				}
				{
					txtCodigo = new JTextField();
					getContentPane().add(txtCodigo);
					txtCodigo.setBounds(163, 21, 74, 28);
				}
				{
					lblDescripcion = new JLabel();
					getContentPane().add(lblDescripcion);
					lblDescripcion.setText("Descripcion:");
					lblDescripcion.setBounds(46, 156, 85, 14);
					lblDescripcion.setFont(new java.awt.Font("Tahoma", 1, 11));
				}
				{
					txtDescripcion = new JTextField();
					getContentPane().add(txtDescripcion);
					txtDescripcion.setBounds(163, 149, 388, 28);
				}
				{
					jTabbedPane1 = new JTabbedPane();
					getContentPane().add(jTabbedPane1);
					jTabbedPane1.setBounds(40, 232, 511, 197);

					{
						DPTareas = new JDesktopPane();
						jTabbedPane1.addTab("Tareas Asignadas", null, DPTareas,
								null);
						DPTareas.setPreferredSize(new java.awt.Dimension(511, 167));
						{
							jScrollPane1 = new JScrollPane();
							DPTareas.add(jScrollPane1,
									JLayeredPane.DEFAULT_LAYER);
							jScrollPane1.setBounds(12, 12, 476, 96);
							{
								TableModel TBTareasModel = new DefaultTableModel(
										new String[][] { { "One", "Two" },
												{ "Three", "Four" } },
										new String[] { "Tarea", "Fecha",
												"Empleado" });
								tblTareas = new JTable();
								jScrollPane1.setViewportView(tblTareas);
								tblTareas.setModel(TBTareasModel);
								tblTareas.setBounds(219, 34, 101, 42);
							}
						}
						{
							btnAgregarTarea = new JButton();
							DPTareas.add(btnAgregarTarea, JLayeredPane.DEFAULT_LAYER);
							btnAgregarTarea.setText("Agregar");
							btnAgregarTarea.setIcon(new ImageIcon(getClass()
									.getClassLoader().getResource(
											"iconos/Agregar.png")));
							btnAgregarTarea.setBounds(152, 120, 103, 27);
						}
						{
							btnModificarTarea = new JButton();
							DPTareas.add(btnModificarTarea, JLayeredPane.DEFAULT_LAYER);
							btnModificarTarea.setText("Modificar");
							btnModificarTarea.setBounds(261, 120, 111, 27);
							btnModificarTarea.setIcon(new ImageIcon(getClass().getClassLoader().getResource("iconos/Modificar.png")));
						}
						{
							btnQuitarTarea = new JButton();
							DPTareas.add(btnQuitarTarea, JLayeredPane.DEFAULT_LAYER);
							btnQuitarTarea.setText("Quitar");
							btnQuitarTarea.setIcon(new ImageIcon(getClass()
									.getClassLoader().getResource(
											"iconos/Quitar.png")));
							btnQuitarTarea.setBounds(379, 120, 94, 27);
						}
					}
					{
						DPMateriales = new JDesktopPane();
						jTabbedPane1.addTab("Materiales Asignados", null,
								DPMateriales, null);
						DPMateriales.setBackground(new java.awt.Color(214, 217,
								223));
						{
							jScrollPane2 = new JScrollPane();
							DPMateriales.add(jScrollPane2,
									JLayeredPane.DEFAULT_LAYER);
							jScrollPane2.setBounds(12, 12, 476, 96);
							{
								TableModel TBMaterialesModel = new DefaultTableModel(
										new String[][] { { "One", "Two" },
												{ "Three", "Four" } },
										new String[] { "Material" });
								tblMateriales = new JTable();
								jScrollPane2.setViewportView(tblMateriales);
								tblMateriales.setModel(TBMaterialesModel);
								tblMateriales.setBounds(173, 28, 212, 70);
							}
						}
						{
							btnAgregarMaterial = new JButton();
							DPMateriales.add(btnAgregarMaterial, JLayeredPane.DEFAULT_LAYER);
							btnAgregarMaterial.setText("Agregar");
							btnAgregarMaterial.setIcon(new ImageIcon(getClass()
									.getClassLoader().getResource(
											"iconos/Agregar.png")));
							btnAgregarMaterial.setBounds(152, 119, 103, 27);
						}
						{
							btnModificarMaterial = new JButton();
							DPMateriales.add(btnModificarMaterial, JLayeredPane.DEFAULT_LAYER);
							btnModificarMaterial.setText("Modificar");
							btnModificarMaterial.setBounds(261, 120, 111, 27);
							btnModificarMaterial.setIcon(new ImageIcon(getClass().getClassLoader().getResource("iconos/Modificar.png")));
						}
						{
							btnQuitarMaterial = new JButton();
							DPMateriales.add(btnQuitarMaterial, JLayeredPane.DEFAULT_LAYER);
							btnQuitarMaterial.setText("Quitar");
							btnQuitarMaterial.setIcon(new ImageIcon(getClass()
									.getClassLoader().getResource(
											"iconos/Quitar.png")));
							btnQuitarMaterial.setBounds(379, 120, 94, 27);
						}
					}
				}
				{
					btSalir = new JButton();
					getContentPane().add(btSalir);
					btSalir.setText("Salir");
					btSalir.setIcon(new ImageIcon(getClass().getClassLoader()
							.getResource("iconos/Salir.gif")));
					btSalir.setHorizontalTextPosition(JButton.CENTER);
					btSalir.setVerticalTextPosition(JButton.BOTTOM);
					btSalir.setBounds(479, 597, 79, 40);
				}
				{
					btAceptar = new JButton();
					getContentPane().add(btAceptar);
					btAceptar.setText("Aceptar");
					btAceptar.setIcon(new ImageIcon(getClass().getClassLoader()
							.getResource("iconos/Aceptar.png")));
					btAceptar.setHorizontalTextPosition(JButton.CENTER);
					btAceptar.setVerticalTextPosition(JButton.BOTTOM);
					btAceptar.setBounds(381, 597, 79, 40);
				}
				{
					lblComentarios = new JLabel();
					getContentPane().add(lblComentarios);
					lblComentarios.setText("Comentarios:");
					lblComentarios.setBounds(46, 490, 85, 14);
					lblComentarios.setFont(new java.awt.Font("Tahoma", 1, 11));
				}
				{
					lblEmpleado = new JLabel();
					getContentPane().add(lblEmpleado);
					lblEmpleado.setText("Jefe de proyecto:");
					lblEmpleado.setBounds(46, 194, 109, 14);
					lblEmpleado.setFont(new java.awt.Font("Tahoma", 1, 11));
				}
				{
					txtEmpleado = new JTextField();
					getContentPane().add(txtEmpleado);
					txtEmpleado.setBounds(163, 190, 204, 28);
				}
				{
					btBuscarEmpleado = new JButton();
					getContentPane().add(btBuscarEmpleado);
					btBuscarEmpleado.setIcon(new ImageIcon(getClass().getClassLoader()
							.getResource("iconos/buscar.PNG")));
					btBuscarEmpleado.setBounds(375, 192, 41, 27);
				}
				{
					jScrollPane3 = new JScrollPane();
					getContentPane().add(jScrollPane3);
					jScrollPane3.setBounds(40, 510, 511, 77);
					jScrollPane3
							.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
					jScrollPane3
							.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
					{
						txtaComentarios = new JTextArea();
						jScrollPane3.setViewportView(txtaComentarios);
						// txtaComentarios.setBounds(133, 789, 495, 71);
					}
				}
				{
					lblEstadoServicio = new JLabel();
					getContentPane().add(lblEstadoServicio);
					lblEstadoServicio.setText("Estado de servicio:");
					lblEstadoServicio
							.setFont(new java.awt.Font("Tahoma", 1, 11));
					lblEstadoServicio.setBounds(46, 454, 133, 14);
				}
				{
					cmbEstadoServicio = new JComboBox();
					getContentPane().add(cmbEstadoServicio);
					cmbEstadoServicio.setBounds(163, 449, 360, 24);
				}
				{
					jLabel1 = new JLabel();
					getContentPane().add(jLabel1);
					jLabel1.setText("Fecha de inicio:");
					jLabel1.setFont(new java.awt.Font("Tahoma", 1, 11));
					jLabel1.setBounds(46, 116, 108, 14);
				}
				{
					txtFechaInicio = new JTextField();
					getContentPane().add(txtFechaInicio);
					txtFechaInicio.setBounds(163, 108, 103, 28);
					txtFechaInicio.setEnabled(false);
				}
				{
					jLabel2 = new JLabel();
					getContentPane().add(jLabel2);
					jLabel2.setText("Fecha de finalizacion:");
					jLabel2.setFont(new java.awt.Font("Tahoma",1,11));
					jLabel2.setBounds(292, 115, 150, 14);
				}
				{
					jTextField1 = new JTextField();
					getContentPane().add(jTextField1);
					jTextField1.setEnabled(false);
					jTextField1.setBounds(448, 108, 103, 28);
				}
				{
					jLabel3 = new JLabel();
					getContentPane().add(jLabel3);
					jLabel3.setText("Servicio base:");
					jLabel3.setFont(new java.awt.Font("Tahoma",1,11));
					jLabel3.setBounds(46, 73, 96, 14);
				}
				{
					txtServicioBase = new JTextField();
					getContentPane().add(txtServicioBase);
					txtServicioBase.setEnabled(false);
					txtServicioBase.setBounds(163, 67, 291, 28);
				}
				{
					btBuscarServicio = new JButton();
					getContentPane().add(btBuscarServicio);
					btBuscarServicio.setIcon(new ImageIcon(getClass().getClassLoader().getResource("iconos/buscar.PNG")));
					btBuscarServicio.setBounds(469, 66, 41, 27);
				}
				{
					txtCosto = new JTextField();
					getContentPane().add(txtCosto);
					txtCosto.setBounds(501, 192, 45, 28);
				}
				{
					lblCosto = new JLabel();
					getContentPane().add(lblCosto);
					lblCosto.setText("Costo: Bs");
					lblCosto.setFont(new java.awt.Font("Tahoma",1,11));
					lblCosto.setBounds(422, 199, 79, 14);
				}
			}
			this.setSize(592, 680);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	private DlgServicioPrestado dlg = this;
	private JLabel lblCosto;
	private JTextField txtCosto;
	private JButton btBuscarServicio;
	private Empleado jefeProyecto;
	private Servicio servicioBase;

	public void darFormatos(){ 
		Utilidades.convertirMayuscula(txtDescripcion);
		Utilidades.limitarCaracteres(txtDescripcion, 15);
		Utilidades.convertirMayuscula(txtaComentarios);
	}
	
	/*public void mostrar(JDialog dialog) {
		setLocationRelativeTo(null);
		setVisible(true);

		btBuscarEmpleado.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				DlgSeleccionarEmpleado dsemp = new DlgSeleccionarEmpleado(dlg);
				dsemp.mostrar(dlg);
			}
		});

		btSalir.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				dlg.dispose();
			}
		});

		setModalityType(ModalityType.APPLICATION_MODAL);
		setVisible(true);
	}*/

	public void mostrarPlanificarServicio(final DetalleSolicitud detalle) {
		setLocationRelativeTo(null);

		setTitle("Planificar Servicio");
		
		darFormatos();
		
		jefeProyecto = null;
		servicioBase = null;
		
		final int cod = Servidor.serviciosPrestados().nuevoCodigoServicioPrestado();
		
		txtEmpleado.setEnabled(false);
		cmbEstadoServicio.setModel(new DefaultComboBoxModel(Servidor.servicios().consultarEstadosServicio().toArray()));
		txtCodigo.setText(String.format("%04d", cod));
		txtCodigo.setEnabled(false);
		
		txtDescripcion.setText(detalle.getDescripcion());
		
		btnAgregarTarea.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				DlgTareaAsignada dta = new DlgTareaAsignada(null);
				
				TareaAsignada tarea = dta.mostrarNueva(null);
				if (tarea != null) {
					tareas.add(tarea);
					atmTareas.fireTableDataChanged();
				}
			}
		});
		
		btnModificarTarea.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				DlgTareaAsignada dta = new DlgTareaAsignada(null);
				
				int idx = tblTareas.getSelectedRow();
				if (idx == -1) {
					JOptionPane.showMessageDialog(null, "Seleccione una tarea.");
					return;
				}
				
				TareaAsignada tarea = dta.mostrarNueva(tareas.get(idx));
				if (tarea != null) {
					tareas.set(idx, tarea);
					atmTareas.fireTableRowsUpdated(idx, idx);
				}
			}
		});

		btnQuitarTarea.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				int idx = tblTareas.getSelectedRow();
				if (idx == -1) {
					JOptionPane.showMessageDialog(null, "Seleccione una tarea.");
					return;
				}
				
				tareas.remove(idx);
				atmTareas.fireTableRowsDeleted(idx, idx);
			}
		});
		
		btnAgregarMaterial.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				DlgMaterialAsignado dma = new DlgMaterialAsignado(null);
				
				MaterialAsignado material = dma.mostrarNueva(null);
				if (material != null) {
					for (MaterialAsignado ma : materiales)
						if (ma.getMaterial() == material.getMaterial()) {
							JOptionPane.showMessageDialog(null, "El material ya se encuentra registrado.");
							return;
						}
							
					materiales.add(material);
					atmMateriales.fireTableDataChanged();
				}
			}
		});
		
		btnModificarMaterial.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				DlgMaterialAsignado dma = new DlgMaterialAsignado(null);
				
				int idx = tblMateriales.getSelectedRow();
				if (idx == -1) {
					JOptionPane.showMessageDialog(null, "Seleccione un material.");
					return;
				}
				
				MaterialAsignado material = dma.mostrarNueva(materiales.get(idx));
				if (material != null) {
					materiales.set(idx, material);
					atmMateriales.fireTableRowsUpdated(idx, idx);
				}
			}
		});

		btnQuitarMaterial.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				int idx = tblMateriales.getSelectedRow();
				if (idx == -1) {
					JOptionPane.showMessageDialog(null, "Seleccione un material.");
					return;
				}
				
				materiales.remove(idx);
				atmMateriales.fireTableRowsDeleted(idx, idx);
			}
		});
		
		btBuscarEmpleado.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent event) {
				DlgSeleccionarEmpleado dsemp = new DlgSeleccionarEmpleado(dlg);
				Empleado emp = dsemp.mostrar(dlg);
				if (emp != null) {
					jefeProyecto = emp;
					txtEmpleado.setText(jefeProyecto.getCedula() + " - " + jefeProyecto.getNombre() + " " + jefeProyecto.getApellido());
				}
			}
		});
		
		btBuscarServicio.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent event) {
				DlgSeleccionarServicio dss = new DlgSeleccionarServicio();
				Servicio ser = dss.mostrar();
				if (ser != null) {
					servicioBase = ser;
					txtServicioBase.setText(String.format("%04d", servicioBase.getCodigo()) + " - " + servicioBase.getDescripcion());
				}
			}
		});

		btAceptar.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				if (Utilidades.campoVacio(dlg, txtDescripcion, "Descripcion") ||
						Utilidades.campoVacio(dlg, txtCosto, "Costo")) {
					return;
				}
				
				if (servicioBase == null) {
					JOptionPane.showMessageDialog(null, "Seleccione un servicio.");
					return;
				}
				
				if (jefeProyecto == null) {
					JOptionPane.showMessageDialog(null, "Seleccione el jefe de proyecto.");
					return;
				}
				
				ServicioPrestado sp = Servidor.serviciosPrestados().agregarServicioPrestado(
								cod,
								txtDescripcion.getText(),
								txtaComentarios.getText(),
								null,
								null,
								Double.parseDouble(txtCosto.getText()),
								detalle.getEquipo(),
								detalle,
								servicioBase,
								(EstadoServicio) cmbEstadoServicio.getSelectedItem(),
								jefeProyecto);
				
				for (TareaAsignada ta : tareas)
					Servidor.serviciosPrestados().agregarTareaAsignada(ta.getCodigo(), ta.getDescripcion(), ta.getComentario(), ta.getFecha(), ta.getCosto(), ta.getEstado(), sp, ta.getTarea(), ta.getEmpleado(), Status.ACTIVO);
				
				for (MaterialAsignado ma : materiales)
					Servidor.serviciosPrestados().agregarMaterialAsignado(sp, ma.getMaterial(), ma.getCantidad(), ma.getMonto());
				
				JOptionPane.showMessageDialog(null, "Registro exitoso.");
				DetalleSolicitud det=detalle;
				det.setStatus(detalle.getStatus().INACTIVO);
				Servidor.solicitudes().modificarDetalleSolicitud(det);
				dlg.dispose();
			}
		});
		
		btSalir.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent event) {
				dlg.dispose();
			}
		});
		
		tareas = new ArrayList<TareaAsignada>();
		atmTareas = new AbstractTableModel() {
			@Override
			public Object getValueAt(int rowIndex, int columnIndex) {
				TareaAsignada tarea = tareas.get(rowIndex);
				
				switch (columnIndex) {
				case 0: return tarea.getDescripcion();
				case 1: {
					Empleado emp = tarea.getEmpleado();
					if (emp == null)
						return "<no asignado>";
					else
						return emp.getNombre() + " " + emp.getApellido();
				}
				case 2: {
					Date d = tarea.getFecha();
					if (d == null)
						return "<no asignado>";
					else
						return d;
				}
				case 3: return tarea.getEstado();
				}
				
				return null;
			}
			
			@Override
			public int getRowCount() {
				return tareas.size();
			}

			@Override
			public String getColumnName(int columnIndex) {
				switch (columnIndex) {
				case 0: return "Descripcion";
				case 1: return "Empleado";
				case 2: return "Fecha";
				case 3: return "Estado";
				}
				
				return null;
			}
			
			@Override
			public int getColumnCount() {
				return 4;
			}
		};
		
		materiales = new ArrayList<MaterialAsignado>();
		atmMateriales = new AbstractTableModel() {
			@Override
			public Object getValueAt(int rowIndex, int columnIndex) {
				MaterialAsignado masig = materiales.get(rowIndex);
				
				switch (columnIndex) {
				case 0: return masig.getMaterial().getDescripcion();
				case 1: return masig.getCantidad();
				case 2: return masig.getMonto();
				}
				
				return null;
			}
			
			@Override
			public int getRowCount() {
				return materiales.size();
			}

			@Override
			public String getColumnName(int columnIndex) {
				switch (columnIndex) {
				case 0: return "Descripcion";
				case 1: return "Cantidad";
				case 2: return "Monto";
				}
				
				return null;
			}
			
			@Override
			public int getColumnCount() {
				return 3;
			}
		};
		
		tblTareas.setModel(atmTareas); 
		tblMateriales.setModel(atmMateriales);

		setModalityType(ModalityType.APPLICATION_MODAL);
		setVisible(true);
	}
}
